package java_0303_heap;

import java.util.Arrays;
import java.util.concurrent.ThreadLocalRandom;

import static java_0228.HeapTest.isSorteds;

public class HeapTest {
    public static void main(String[] args) {
        /**
         * 堆化测试：任意数组变为堆
         */
        int[] data={15,17,19,13,22,16,28,30,41,62};
        MaxHeap heap=new MaxHeap(data);
        System.out.println(heap);
        /**
         * 3.大量随机数据测试是否从extractMax不断取出的元素是否是降序排列
         */
//        //siftDown测试：10w个随机数测试
//        int[] data=new int[100000];
//        //生成随机数
//        //ThreadLocalRandom.current();->取得一个当前类的对象-工厂设计模式
//        //也就是说在这不直接new，而是通过一个方法取得一个实例
//        ThreadLocalRandom random=ThreadLocalRandom.current();
//        for (int i = 0; i < data.length; i++) {
//            //生成10w个从0开始，到整形最大值的一个随机数
//            data[i]=random.nextInt(0,Integer.MAX_VALUE);
//        }
//        //将数组构建成堆
//        MaxHeap heap=new MaxHeap();
//        for(int i:data){
//            heap.add(i);
//        }
//        //从0开始不断取出堆中最大值放入数组并验证是否是非递减序列
//        for (int i = 0; i < data.length; i++) {
//            data[i]= heap.extractMax();
//        }
//        System.out.println(isSorteds(data));
        /**
         * 2.取出堆中元素最大值
         */
//        MaxHeap heap=new MaxHeap();
//        int[] arr={62,41,30,28,16,13,22,19,17,15};
//        for (int i:arr) {
//            heap.add(i);
//        }
//        //不断从堆中取出最大值
//        for (int i = 0; i < arr.length; i++) {
//            arr[i]=heap.extractMax();
//        }
//        System.out.println(Arrays.toString(arr));

        /**
         *1.向堆中添加元素50
         */
//        MaxHeap heap=new MaxHeap();
//        int[] arr={62,41,30,28,16,13,22,19,17,15};
//        for (int i:arr) {
//            heap.add(i);
//        }
//        heap.add(50);
//        System.out.println(heap);
    }
}
